/*
题目：根据二叉树创建字符串
给你二叉树的根节点 root ，请你采用前序遍历的方式，将二叉树转化为一个由括号和整数组成的字符串，返回构造出的字符串。

空节点使用一对空括号对 "()" 表示，转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
https://leetcode.cn/problems/construct-string-from-binary-tree/
 */
public class Tree2str {
    StringBuilder sb = new StringBuilder();
    public String tree2str(TreeNode root) {
        if (root == null)   return null;
        dfs(root);
        return sb.toString();
    }

    private void dfs(TreeNode root) {
        if (root == null)   return ;
        sb.append(root.val);
        if (root.left != null) {
            sb.append('(');
            dfs(root.left);
            sb.append(")");
        } else { //左子树为空
            if (root.right == null) { //右子树也为空
                return ; //啥事不做
            } else {
                sb.append("()");
            }
        }

        if (root.right != null) {
            sb.append("(");
            dfs(root.right);
            sb.append(")");
        }
    }
}
